﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Mapeo;
using System.Data;
using NHibernate;
using MySql.Data.MySqlClient;
using BE;
using NHibernate.Criterion;

namespace DAL
{
    public class ReporteNominaComplementario_DAL:Controlador
    {
        public DataTable DATA_ObtenerNominaComplementaria(String Ciclo, String Especialidad, String Periodo)
        {
            using (ISession Sesion = m_SessionFactory.OpenSession())
            {
                using (ITransaction Trans = Sesion.BeginTransaction())
                {
                    MySqlCommand SqlCmd = new MySqlCommand();
                    SqlCmd.Connection = (MySqlConnection)Sesion.Connection;
                    Trans.Enlist(SqlCmd);
                    SqlCmd.CommandText = "Cursor_Notas_Nuevas_Antiguas";
                    SqlCmd.CommandType = System.Data.CommandType.StoredProcedure;
                    SqlCmd.Parameters.AddWithValue("@inCiclo", Ciclo);
                    SqlCmd.Parameters.AddWithValue("@inEspecialidad", Especialidad);
                    SqlCmd.Parameters.AddWithValue("@inPeriodo", Periodo);

                    SqlCmd.ExecuteNonQuery();
                    MySqlDataAdapter da = new MySqlDataAdapter(SqlCmd);
                    DataTable dt = new DataTable();
                    da.Fill(dt);
                    Trans.Commit();
                    return dt;
                }
            }
        }



        public List<Especialidad> ObtenerEspecialidadesPorEscuela(String IDEscuelaProfesional)
        {
            try
            {
                using (ISession Sesion = m_SessionFactory.OpenSession())
                {
                    ICriteria criteria = Sesion.CreateCriteria("Especialidad")
                        .Add(Restrictions.Eq("Cod_Escuela", IDEscuelaProfesional))
                        .AddOrder(Order.Asc("ORDEN"));
                    criteria.SetMaxResults(50);
                    List<Especialidad> listado = (List<Especialidad>)criteria.List<Especialidad>();
                    return listado;
                }
            }
            catch (Exception)
            {

                throw;
            }
        }


        public List<Especialidad> ObtenerEspecialidades()
        {
            try
            {
                using (ISession Sesion = m_SessionFactory.OpenSession())
                {
                    ICriteria criteria = Sesion.CreateCriteria("Especialidad")
                        .AddOrder(Order.Asc("ORDEN"));
                    criteria.SetMaxResults(50);
                    List<Especialidad> listado = (List<Especialidad>)criteria.List<Especialidad>();
                    return listado;
                }
            }
            catch (Exception)
            {

                throw;
            }
        }

        public List<Periodo> ObtenerPeriodos()
        {
            try
            {
                using (ISession Sesion = m_SessionFactory.OpenSession())
                {
                    NHibernate.ICriteria criteria = Sesion.CreateCriteria("Periodo")
                        .AddOrder(Order.Desc("Semestre"));
                    criteria.SetMaxResults(50);
                    List<Periodo> listado = (List<Periodo>)criteria.List<Periodo>();
                    return listado;
                }
            }
            catch (Exception)
            {

                throw;
            }
        }

        public List<Escuela> ObtenerEscuela()
        {
            try
            {
                using (ISession Sesion = m_SessionFactory.OpenSession())
                {
                    NHibernate.ICriteria criteria = Sesion.CreateCriteria("Escuela");
                    criteria.SetMaxResults(50);
                    List<Escuela> listado = (List<Escuela>)criteria.List<Escuela>();
                    return listado;
                }
            }
            catch (Exception)
            {

                throw;
            }
        }

        public List<Ciclos> ObtenerCiclos()
        {
            try
            {
                using (ISession Sesion = m_SessionFactory.OpenSession())
                {
                    NHibernate.ICriteria criteria = Sesion.CreateCriteria("Ciclos");
                    criteria.SetMaxResults(50);
                    List<Ciclos> listado = (List<Ciclos>)criteria.List<Ciclos>();
                    return listado;
                }
            }
            catch (Exception)
            {

                throw;
            }
        }


        public void ActualizarFlagNotasDesaprobados(String Codigo, String IdCurso, int Flag)
        {
            using (ISession Sesion = m_SessionFactory.OpenSession())
            {
                using (ITransaction Trans = Sesion.BeginTransaction())
                {
                    MySqlCommand SqlCmd = new MySqlCommand();
                    SqlCmd.Connection = (MySqlConnection)Sesion.Connection;
                    Trans.Enlist(SqlCmd);
                    SqlCmd.CommandText = "ActuliazarFlagNotas";
                    SqlCmd.CommandType = System.Data.CommandType.StoredProcedure;
                    SqlCmd.Parameters.AddWithValue("@inCodigo", Codigo);
                    SqlCmd.Parameters.AddWithValue("@inCurso", IdCurso);
                    SqlCmd.Parameters.AddWithValue("@inFlag", Flag);
                    SqlCmd.ExecuteNonQuery();
                    Trans.Commit();
                }
            }
        }


    }
}
